[IA64] Fix a bug in INIT handler
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Wed, 1 Nov 2006 05:25:21 +0000 (22:25 -0700)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Wed, 1 Nov 2006 05:25:21 +0000 (22:25 -0700)
I found a bug in INIT handler.  This bug sometimes occurs on
the following conditions.
 1. Create a domVTi
 2. Run a user program on domVTi
 3. Push to INIT switch

When this bug occurs, Xen shows error messages.

This bug occurs if a vCPU of domVTi runs on a pCPU where its
INIT interruption have not occurred yet.  It is because
"arch._thread.on_ustack" member in vcpu structure is always
zero and, accordingly, ar.bspstore doesn't switch to Xen RBS
in the MINSTATE_START_SAVE_MIN_PHYS.

This patch adds a checking of ipsr.vm bit into the
MINSTATE_START_SAVE_MIN_PHYS for domVTi.  If ipsr.vm bit is 1,
ar.bspstore is switched to Xen RBS.

Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
xen/arch/ia64/linux-xen/minstate.h

index b229b2d417bb56e3deae785a7203541f3393f188..5c582e2a40b7fff9aca285b491e796750583a497 100644 (file)
@@ -38,6 +38,8 @@
  */
 #ifdef XEN
 # define MINSTATE_START_SAVE_MIN_PHYS                                                          \
+(pKStk)        tbit.z pKStk,pUStk=r29,IA64_PSR_VM_BIT;                                                 \
+       ;;                                                                                      \
 (pKStk)        movl r3=THIS_CPU(ia64_mca_data);;                                                       \
 (pKStk)        tpa r3 = r3;;                                                                           \
 (pKStk)        ld8 r3 = [r3];;                                                                         \